package com.corpgovernment.organization.entity;

import com.corpgovernment.common.mq.enums.MessageBizTypeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * 同步人员请求实体
 */
@Data
@EqualsAndHashCode
public class SyncEmployeeRequestEntity implements Serializable {

    /**
     * 人员列表
     */
    @Valid
    @NotEmpty(message = "人员列表不能为空")
    private List<SyncEmployeeInfoEntity> employeeInfoList;
    /**
     * 异步结果回调地址，会通知同步操作的结果；不传则不通知结果
     */
    private String notifyUrl;

    /**
     * 操作记录id
     */
    Long recordId;

    /**
     * 授权码 客户码
     */
    private String tenantId;

    public SyncEmployeeRequestEntity() {
    }

    /**
     * 人员信息
     */
    @Data
    public static class SyncEmployeeInfoEntity implements Serializable {
        /**
         * excel行号
         */
        String lineNo;
        /**
         * 操作人组织id
         */
        String operatorCorpId;
        /**
         * 是否删除人员（默认不删除）
         */
        Boolean isDelete;
        /**
         * 基本信息，根据orgid判断是新增还是修改
         */
        @Valid
        @NotNull(message = "人员基本信息不能为空")
        private BasicInfoEntity basicInfo;
        /**
         * 证件列表
         */
        @Valid
        private List<CardTypeEntity> cardTypeList;
        /**
         * 员工所属组织
         */
        @Valid
        private List<OrgRelationEntity> orgRelation;

        /**
         * 操作枚举
         */
        private MessageBizTypeEnum messageBizTypeEnum;

        public SyncEmployeeInfoEntity() {
        }

        /**
         * 人员架构基本信息
         */
        @Data
        public static class BasicInfoEntity implements Serializable {
            /**
             * 员工ID，对应客户公司员工主键
             */
            @NotBlank(message = "人员ID不能为空")
            private String uid;
            /**
             * 人员名称
             */
            @NotBlank(message = "人员名称不能为空")
            private String name;
            /**
             * 英文姓
             */
            private String lastName;
            /**
             * 英文名
             */
            private String firstName;
            /**
             * 手机国家码
             */
            @NotBlank(message = "手机国家码不能为空")
            private String countryCode;
            /**
             * 手机号
             */
            @NotBlank(message = "手机号不能为空")
            private String mobilePhone;
            /**
             * 登录密码（不传默认同手机号）
             */
            private String password;
            /**
             * 生日（yyyy-MM-dd）
             */
            private String birthday;
            /**
             * 性别，不传则默认男性（M男性、F女性）
             */
            private String gender;
            /**
             * 邮箱
             */
            private String email;
            /**
             * 国籍，不传默认中国（中国CN、香港HK，参考通用的国家二字码）
             */
            private String nationality;
            /**
             * 银行卡号
             */
            private String creditCardNumbers;
            /**
             * 直接上级ID，对应客户公司员工主键
             */
            private String manageUid;

            public BasicInfoEntity() {
            }
        }

        /**
         * 证件
         */
        @Data
        public static class CardTypeEntity implements Serializable {

            /**
             * 证件类型（1:身份证; 2:护照; 3:学生证; 4:军人证; 6:驾驶证; 7:回乡证; 8:台胞证; 10:港澳通行证; 11:国际海员证; 21:旅行证; 22:台湾通行证; 25:户口簿; 27:出生证明; 28:外国人永久居留身份证; 32:港澳台居民居住证）
             */
            @NotNull(message = "证件类型不能为空")
            private Integer cardType;
            /**
             * 证件号码
             */
            @NotBlank(message = "证件号码不能为空")
            private String cardNo;
            /**
             * 证件有效期（yyyy-MM-dd）
             */
            private String timeLimit;


            public CardTypeEntity() {
            }
        }

        /**
         * 员工所属组织
         */
        @Data
        public static class OrgRelationEntity implements Serializable {

            /**
             * 员工所属组织（对应客户系统中的组织主键）
             */
            @NotBlank(message = "员工所属组织不能为空")
            private String orgId;
            /**
             * 职级名称(对应客户系统中的职级主键)
             */
            private String postName;

            public OrgRelationEntity() {
            }
        }
    }
}
